		LIST	P=16F877A
		RADIX	HEX		
		INCLUDE	<P16F877A.INC>


    Contador equ 0x0C ; Registro para almacenar conteo
    Contador1 equ 0x0D ; Registro utilizado en demora.-
    Contador2 equ 0x0E ; Registro utilizado en demora.-
    Pulsador equ 7 ; Definimos Pulsador como el bit 7, en este caso sera para PORTB
    
    Reset org 0x00 ; Aqui comienza el micro.-
    goto Inicio ; Salto a inicio de mi programa.-
    org 0x05 ; Origen del codigo de tabla.-
Ascendente: 
    		addwf PCL,1 ; Se incrementa el contador del programa.-
    		retlw b'0111111' ; 0
   			retlw b'0000110' ; 1
    		retlw b'1011011' ; 2
   			retlw b'1001111' ; 3
    		retlw b'1100110' ; 4
    		retlw b'1101101' ; 5
    		retlw b'1111101' ; 6
    		retlw b'0000111' ; 7
    		retlw b'1111111' ; 8
    		retlw b'1101111' ; 9
    		clrf Contador ; Si llega 10, se resetea contador
    		retlw b'0111111' ; 0
     
   
    
    Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
    movlw b'10000000' ; RB7 como entrada y los demas como salida.-
    movwf TRISB
    bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
    movlw b'0111111' ; Comienza en cero.-
    movwf PORTB
    clrf Contador
    
Consulta
    btfss PORTB,Pulsador ; consulta si esta a 1 logico.-
    goto Consulta ; No, seguimos consultando.-
    call Demora_20ms ; Eliminamos Efecto rebote
    btfss PORTB,Pulsador ; Testeamos nuevamente.-
    goto  Consulta; Falsa Alarma, seguimos consultado.-
    incf Contador,1 ; Se ha pulsado, incrementamos contador.-
    movfw Contador ; pasamos contador a W
    call Ascendente  ; Llamamos tabla.-
    movwf PORTB ; Cargamos valor recibido por Tabla en PORTB
    btfsc PORTB,Pulsador ; Esperamos a que se suelte el pulsador -**-
    goto $-1 ; No, PCL - 1,  btfss PORTA,
    call Demora_20ms ; Eliminamos efecto rebote.-
    btfsc PORTB,Pulsador ; Testeamos nuevamente.-
    goto $-4 ; No, Falsa alarma, volvemos a consultar a que se suelte 
    goto Consulta ; Si, consulta nuevamente.-
    
		
Demora_20ms
    		movlw 0xFF ;
    		movwf Contador1 ; Iniciamos contador1.-
    
Repeticion1
    		movlw 0x19 ;
    		movwf Contador2 ; Iniciamos contador2
Repeticion2
    		decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
    		goto Repeticion2 ; Si no es 0 repetimos ciclo.-
    		decfsz Contador1,1 ; Decrementa Contador1.-
    		goto Repeticion1 ; Si no es cero repetimos ciclo.-
    		return ; Regresa de la subrutina.-
     
    		end